package com.demo.java.OD501_550.OD515;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【多线段数据压缩(C卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146482036
 */
public class OdMain {
    public static void main(String[] args) {
        // 输入处理
        Scanner in = new Scanner(System.in);
        String input_str = in.nextLine();  // 读取一行输入
        String[] tmp2 = input_str.split(" ");  // 按空格拆分输入
        int[] nums = new int[tmp2.length];  // 存储数字
        for (int i = 0; i < tmp2.length; i++) {
            nums[i] = Integer.parseInt(tmp2[i]);  // 将字符串转换为整数
        }

        List<Integer> result = new ArrayList<>();
        result.add(nums[0]);  // 添加第一个点
        result.add(nums[1]);  // 添加第二个点

        // 从第三个点开始判断
        for (int i = 2; i < nums.length - 2; i++) {
            if (!checkStraightLine(new int[]{nums[i - 2], nums[i - 1]},
                    new int[]{nums[i], nums[i + 1]},
                    new int[]{nums[i + 2], nums[i + 3]})) {
                result.add(nums[i]);  // 如果不是在一条直线，添加到结果
                result.add(nums[i + 1]);
            }
            i += 1;
        }

        // 添加最后两个点
        if (nums.length >= 4) {
            result.add(nums[nums.length - 2]);
            result.add(nums[nums.length - 1]);
        }

        // 输出结果路径
        String output_path = "";
        for (int i = 0; i < result.size(); i++) {
            output_path += result.get(i);  // 拼接结果字符串
            if (i != result.size() - 1) {
                output_path += " ";
            }
        }
        System.out.print(output_path);  // 输出路径
    }

    // 判断三点是否在一条直线上的方法
    public static boolean checkStraightLine(int[] point1, int[] point2, int[] point3) {
        int y1 = point2[1] - point1[1];  // 计算第一个和第二个点的y差
        int x1 = point2[0] - point1[0];  // 计算第一个和第二个点的x差
        int y2 = point3[1] - point2[1];  // 计算第二个和第三个点的y差
        int x2 = point3[0] - point2[0];  // 计算第二个和第三个点的x差

        // 判断两点的斜率是否相等，如果相等则在同一条直线上
        if (y1 * x2 != y2 * x1) {
            return false;
        }
        return true;
    }
}